node学习笔记——MD5加密与图片处理

MD5加密

永远不要用明码写密码,这样黑客拿到的用户的密码的加密信息也没用,因为他无法翻译成为明码。

MD5加密是函数型加密。就是每次加密的结果一定相同,没有随机位。

特点:

  • 不管加密的文字,多长多短,永远都是32位英语字母、数字混合。
  • 哪怕只改一个字,密文都会大变。
  • MD5没有反函数破解的可能,网上的破解工具,都是通过字典的模式,通过大量列出明-密对应的字典,找到明码。两次加密网上也有对应的字典。所以我们不要直接用一层md5,这样对黑客来说和明码是一样。
  • MD5常用于作为版本校验。可以比对两个软件、文件是否完全一致。

使用方法:

1
2
3
4
//首先创建hash
var md5 = crypto.createHash('md5');
//然后update和digest
var password = md5.update(fields.password).digest('base64');
1
2
3
4
5
6
7
8
9
var crypto = require("crypto");
//两次加密
console.log(md5(md5("123456").substr(11,7) + md5("123456")));

function md5(mingma){
var md5 = crypto.createHash('md5');
var password = md5.update(mingma).digest('base64');
return password;
}

在注册登陆使用加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
var express = require("express");
var app = express();
var formidable = require('formidable');
var db = require("./model/db.js");//数据库增删该查方法封装
var md5 = require("./model/md5.js");//md5加密方法

app.set("view engine","ejs"); //ejs模板
app.use(express.static("./public"));//静态化页面

//注册页面
app.get("/regist",function(res,res,next){
res.render("regist");
});

//登陆页面
app.get("/login",function(res,res,next){
res.render("login");
});

//执行注册
app.get("/doregist",function(req,res,next){
var dengluming = req.query.dengluming;
var mima = req.query.mima;
//加密
mima = md5(md5(mima).substr(4,7) + md5(mima));

//把用户名和密码存入数据库
db.insertOne("users",{
"dengluming" : dengluming,
"mima" : mima
},function(err,result){
if(err){
res.send("-1");
return;
}
res.send("1");
})
});

//执行登陆
app.post("/dologin",function(req,res,next){
var form = new formidable.IncomingForm();

form.parse(req, function(err, fields, files) {
var dengluming = fields.dengluming;
var mima = fields.mima;
mima = md5(md5(mima).substr(4,7) + md5(mima));

//检索数据库,按登录名检索数据库,查看密码是否匹配
db.find("users",{"dengluming":dengluming},function(err,result){
if(result.length == 0){
res.send("-2"); //-2没有这个人
return;
}
var shujukuzhongdemima = result[0].mima;
//要对用户这次输入的密码,进行相同的加密操作。然后与
//数据库中的密码进行比对
if(mima == shujukuzhongdemima){
res.send("1"); //成功
}else{
res.send("-1"); //密码不匹配
}
});
});

return;
});

app.listen(3000);

图片处理

GraphicsMagick is the swiss army knife of image processing

只要服务器需要处理图片,那么这个服务器就要安装 graphicsmagick 或者类似功能的软件,这个是免费的。

装完之后,可视化工具可以删除,因为我们需要的是它提供的接口和命令行操作(代码操作),然后我们要把安装目录设置为环境变量

控制台CMD命令:

1
2
//格式转换
gm convert a.bmp a.jpg
1
2
//更改当前目录下*.jpg的尺寸大小,并保存于目录.thumb里面
gm mogrify -resize 320x200 danny.jpg

nodejs 要使用 graphicsmagick,需要npm装一个 gm 包。

简单使用,缩略图:

1
2
3
4
5
6
7
8
9
10
var fs = require('fs');
var gm = require('gm');

gm('./danny.jpg')
.resize(50, 50,"!")
.write('./danny2.jpg', function (err) {
if (err) {
console.log(err);
}
});

头像裁剪:

1
2
3
4
5
6
7
8
9
var fs = require('fs');
var gm = require('gm');

//141 96 是宽高 。 152 181是坐标
gm("./danny.jpg").crop(141,96,152,181).write("./2.jpg",function(err){
if (err) {
console.log(err);
}
});



完~